package com.ruoyi.system.service.impl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysDbConfig;
import com.ruoyi.system.mapper.SysDbConfigMapper;
import com.ruoyi.system.service.ISysDbConfigService;

/**
 * 数据库配置 服务层实现
 * 
 * @author ruoyi
 */
@Service
public class SysDbConfigServiceImpl implements ISysDbConfigService
{
    @Autowired
    private SysDbConfigMapper dbConfigMapper;

    /**
     * 查询数据库配置信息
     * 
     * @param dbId 数据库配置ID
     * @return 数据库配置信息
     */
    @Override
    public SysDbConfig selectDbConfigById(Long dbId)
    {
        return dbConfigMapper.selectDbConfigById(dbId);
    }

    /**
     * 查询数据库配置列表
     * 
     * @param dbConfig 数据库配置信息
     * @return 数据库配置集合
     */
    @Override
    public List<SysDbConfig> selectDbConfigList(SysDbConfig dbConfig)
    {
        return dbConfigMapper.selectDbConfigList(dbConfig);
    }

    /**
     * 校验数据库名称是否唯一
     * 
     * @param dbConfig 数据库配置信息
     * @return 结果
     */
    @Override
    public boolean checkDbNameUnique(SysDbConfig dbConfig)
    {
        Long dbId = StringUtils.isNull(dbConfig.getDbId()) ? -1L : dbConfig.getDbId();
        SysDbConfig info = dbConfigMapper.checkDbNameUnique(dbConfig.getDbName());
        if (StringUtils.isNotNull(info) && info.getDbId().longValue() != dbId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    /**
     * 新增数据库配置
     * 
     * @param dbConfig 数据库配置信息
     * @return 结果
     */
    @Override
    public int insertDbConfig(SysDbConfig dbConfig)
    {
        return dbConfigMapper.insertDbConfig(dbConfig);
    }

    /**
     * 修改数据库配置
     * 
     * @param dbConfig 数据库配置信息
     * @return 结果
     */
    @Override
    public int updateDbConfig(SysDbConfig dbConfig)
    {
        return dbConfigMapper.updateDbConfig(dbConfig);
    }

    /**
     * 测试数据库连接
     * 
     * @param dbConfig 数据库配置信息
     * @return 结果
     */
    @Override
    public boolean testDbConnection(SysDbConfig dbConfig)
    {
        Connection conn = null;
        try
        {
            Class.forName(dbConfig.getDbDriver());
            conn = DriverManager.getConnection(dbConfig.getDbUrl(), dbConfig.getDbUsername(), dbConfig.getDbPassword());
            return true;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            return false;
        }
        finally
        {
            try
            {
                if (conn != null)
                {
                    conn.close();
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }

    /**
     * 删除数据库配置信息
     * 
     * @param dbId 数据库配置ID
     * @return 结果
     */
    @Override
    public int deleteDbConfigById(Long dbId)
    {
        return dbConfigMapper.deleteDbConfigById(dbId);
    }

    /**
     * 批量删除数据库配置信息
     * 
     * @param dbIds 需要删除的数据库配置ID
     * @return 结果
     */
    @Override
    public int deleteDbConfigByIds(Long[] dbIds)
    {
        return dbConfigMapper.deleteDbConfigByIds(dbIds);
    }
} 